package com.webside.rtypemapping.controller;

import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Dictionary;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.http.HttpRequest;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import com.alibaba.fastjson.JSON;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.webside.base.basecontroller.BaseController;
import com.webside.dtgrid.model.Pager;
import com.webside.dtgrid.util.ExportUtils;
import com.webside.exception.AjaxException;
import com.webside.exception.ServiceException;
import com.webside.exception.SystemException;
import com.webside.listener.BaseData;
import com.webside.listener.vo.Channel;
import com.webside.rtypemapping.model.RTypeMapping;
import com.webside.rtypemapping.service.RTypeMappingService;
import com.webside.series.model.Bdictionary;
import com.webside.series.service.BdictionaryService;
import com.webside.subject.model.SubjectEntity;
import com.webside.util.Common;
import com.webside.util.PageUtil;

@Controller
@Scope("prototype")
@RequestMapping("/retype/")
public class RTypeMappingController extends BaseController {
	@Autowired
	RTypeMappingService rTypeMappingService;
	@Autowired
	BdictionaryService dictionaryService;
	
	//页面初始加载的controller
/*	@RequestMapping("listUI.html")
	public String getTypeMapping(HttpRequest request, Model m){
		Map<String, Object> map = new HashMap<String, Object>();
		map.put("pageSize", 10);
		List<RTypeMapping> list = rTypeMappingService.selectRTypeMappingByCondition(map);
		m.addAttribute("list", list);
		
		return Common.BACKGROUND_PATH + "/typeMapping/list";
	}*/
	@RequestMapping("listUI.html")
	public String listUI(Model model, HttpServletRequest request) {
		try
		{
			PageUtil page = new PageUtil();
			if(request.getParameterMap().containsKey("page")){
				page.setPageNum(Integer.valueOf(request.getParameter("page")));
				page.setPageSize(Integer.valueOf(request.getParameter("rows")));
				page.setOrderByColumn(request.getParameter("sidx"));
				page.setOrderByType(request.getParameter("sord"));
			}
			model.addAttribute("page", page);
			return Common.BACKGROUND_PATH + "/retype/list";
		}catch(Exception e)
		{
			throw new SystemException(e);
		}
	}
	/**
	 * ajax分页动态加载模式
	 * @param dtGridPager Pager对象
	 * @throws Exception
	 */
	@RequestMapping(value = "/list.html", method = RequestMethod.POST)
	@ResponseBody
	public Object list(Model model, String gridPager,Bdictionary channel,RTypeMapping retype, HttpServletResponse response) throws Exception{
		
		Map<String, Object> parameters = null;
		// 映射Pager对象
		Pager pager = JSON.parseObject(gridPager, Pager.class);
		// 判断是否包含自定义参数
		parameters = pager.getParameters();
		if (parameters.size() < 0) {
			parameters.put("name", null);
		}
		//3、判断是否是导出操作
		if(pager.getIsExport())
		{
			if(pager.getExportAllData())
			{
				//3.1、导出全部数据
				List<RTypeMapping> list = rTypeMappingService.queryListByPage(parameters);
				ExportUtils.exportAll(response, pager, list);
				return null;
			}else
			{
				//3.2、导出当前页数据
				ExportUtils.export(response, pager);
				return null;
			}
		}else
		{
			
			// 设置分页，page里面包含了分页信息
			Page<Object> page = PageHelper.startPage(pager.getNowPage(),pager.getPageSize());
			List<RTypeMapping> list = rTypeMappingService.queryListByPage(parameters);
			 
			parameters.clear();
			parameters.put("isSuccess", Boolean.TRUE);
			parameters.put("nowPage", pager.getNowPage());
			parameters.put("pageSize", pager.getPageSize());
			parameters.put("pageCount", page.getPages());
			parameters.put("recordCount", page.getTotal());
			parameters.put("startRecord", page.getStartRow());
			parameters.put("exhibitDatas", list);
			return parameters;
		}
		
	}
	//添加显示
	@RequestMapping("addUI.html")
	public String addUI(Model model, HttpServletRequest request) {
		/*List<Bdictionary> templateList =  dictionaryService.dictionaryList("TEMPLATE_KIND", "");
		model.addAttribute("typeList", templateList);
*/
		List<Bdictionary> channel=dictionaryService.dictionaryList("GRAB_SOURCE", "");;
		model.addAttribute("list_source",channel);
        List<Channel> channels=BaseData.channels;
		model.addAttribute("list_channel",channels);
		//查询剧情类型
		/*Bdictionary bdictionary=new Bdictionary();
		for (int i = 0; i < channels.size(); i++) {

			bdictionary.setCode(channels.get(i).getCode());
			List<Bdictionary> dramaTypes =dictionaryService.selectTypeByChannel(bdictionary);
			model.addAttribute("list_dramaTypes"+i,dramaTypes);
			
		}*/
		
		return Common.BACKGROUND_PATH + "/retype/form";
	}
	@RequestMapping(value = "add.html", method = RequestMethod.POST)
	@ResponseBody
	public Object add(Model model,RTypeMapping retype, HttpServletRequest request) {
		
		Map<String, Object> map = new HashMap<String, Object>();
		try
		{	
			Bdictionary dictionary = new Bdictionary();
			dictionary.setCode(retype.getLocalTypeCode());
			dictionary = dictionaryService.selectTypeByChannelCode(dictionary).get(0);
			retype.setLocalTypeName(dictionary.getName());
			int count=rTypeMappingService.insertRTypeMapping(retype);
			 
			if(count >0 )
			{
				map.put("success", Boolean.TRUE);
				map.put("data", null);
				map.put("message", "添加成功");
			}else
			{
				map.put("success", Boolean.FALSE);
				map.put("data", null);
				map.put("message", "添加失败");
			}
		}catch(ServiceException e)
		{
			throw new AjaxException(e);
		}
		return map;
	}
	
	@RequestMapping("getDramaTypes.html")
	@ResponseBody
	public Object getDramaTypeByCode(String code) {
		Bdictionary bdictionary=new Bdictionary();
		bdictionary.setCode(code);
		return dictionaryService.selectTypeByChannel(bdictionary);
	}
	//修改显示
	@RequestMapping("editUI.html")
	public String editUI(Model model, HttpServletRequest request, Long id) {
		
		try
		{
			
			PageUtil page = new PageUtil();
			page.setPageNum(Integer.valueOf(request.getParameter("page")));
			page.setPageSize(Integer.valueOf(request.getParameter("rows")));
			page.setOrderByColumn(request.getParameter("sidx"));
			page.setOrderByType(request.getParameter("sord"));
		
			model.addAttribute("page", page);
			/*model.addAttribute("bdictionary", dictionary);*/
			List<Bdictionary> channel=dictionaryService.dictionaryList("GRAB_SOURCE", "");
			model.addAttribute("list_source",channel);
			 List<Channel> channels=BaseData.channels;
				model.addAttribute("list_channel",channels);
			List<Bdictionary> typeList =  dictionaryService.dictionaryList("TEMPLATE_KIND", "");
			model.addAttribute("typeList", typeList);
			Map<String,Object> paramter = new HashMap<>();
			paramter.put("id", id);
			List<RTypeMapping> retypeList = rTypeMappingService.selectRTypeMappingByCondition(paramter);
			model.addAttribute("retype", retypeList.get(0));

			return Common.BACKGROUND_PATH + "/retype/form";
		}catch(Exception e)
		{
			throw new SystemException(e);
		}
	}
	//修改
	@RequestMapping("edit.html")
	@ResponseBody
	public Object update(RTypeMapping retype)
	{
		Map<String, Object> map = new HashMap<String, Object>();
		
		try
		 {  	 
			Bdictionary dictionary = new Bdictionary();
			dictionary.setCode(retype.getLocalTypeCode());
			dictionary = dictionaryService.selectTypeByChannelCode(dictionary).get(0);
			retype.setLocalTypeName(dictionary.getName());
				int result = rTypeMappingService.updateRTypeMapping(retype);
				System.out.println(result);
			if(result >0)
			{
				map.put("success", Boolean.TRUE);
				map.put("data", null);
				map.put("message", "编辑成功");
				
			}else
			{
				map.put("success", Boolean.FALSE);
				map.put("data", null);
				map.put("message", "编辑失败");
			}
		}catch(Exception e)
		{
			throw new AjaxException(e);
		}
		return map;
	}
	//删除
		@RequestMapping("deleteBatch.html")
		@ResponseBody
		public Object deleteBatch(String ids) {
			Map<String, Object> result = new HashMap<String, Object>();
			try
			{
				String[] seriesIds = ids.split(",");
				List<Long> list = new ArrayList<Long>();
				for (String string : seriesIds) {
					list.add(Long.valueOf(string));
				}
				int cnt = rTypeMappingService.deleteBatchById(list);
				System.out.println(cnt);
				if(cnt == list.size())
				{
					result.put("success", true);
					result.put("data", null);
					result.put("message", "删除成功");
				}else
				{
					result.put("success", false);
					result.put("data", null);
					result.put("message", "删除失败");
				}
			}catch(Exception e)
			{
				throw new AjaxException(e);
			}
			return result;
		}
		
}
